Deref trait
docs
/mrsekut-book-4873118557/308 (13.5 DerefとDerefMut)
#wip
dereferenceした際にどの型になるかを指定する
*はdereference
定義
code:rs
trait Deref {
type Target: ?Sized;
fn deref(&self) -> &Self::Target;
}
*TするとTargetの型になる
たぶんどこかでderef()を*にoperator overloadしてるのだろうmrsekut.icon
実装例
Vec
code:rs
impl<T, A: Allocator> ops::Deref for Vec<T, A> {
type Target = T;
#inline
fn deref(&self) -> &T {
self.as_slice()
}
}
TargetがRustのslice型
Box
code:rs
impl<T: ?Sized, A: Allocator> Deref for Box<T, A> {
type Target = T;
fn deref(&self) -> &T {
&**self
}
}
code:rs
fn main() {
let x = Box::new(42);
// Derefトレイトにより、Box<T>の中身にアクセスできる
println!("{}", *x); // 出力: 42
}
関連
DerefMut trait
code:rs
trait DerefMut: Deref {
fn deref_mut(&mut self) -> &mut Self::Target;
}
Deref traitを継承してる
/mrsekut-book-4873118557/308 (13.5 DerefとDerefMut)